Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Programación web open source con LAMP (página 2)




Enviado por Pablo Turmero



Partes: 1, 2

Monografias.com

Ejemplo Perl CGI
#!/usr/local/bin/perl
use CGI;
use DBI;
$query = new CGI;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/htmlnn";
print "< html>< head>< title>Perl CGI Example # 3";
print "< /title>< /head>< body>< h1>";
print "Perl CGI Example # 3< /h1>< p>";

$dbh = DBI->connect("dbi:mysql:mydatabase","demo","")
or die("Couldn't connect");
$query->import_names('R');

$sth = $dbh->prepare("select * from gazetteer where feature = ?")
or die("Couldn't prepare");
$sth->execute($R::place);

if($sth->rows == 0)
{
print "No information for " . $R::place;
}
else
{
print "< table border=2>n";
while( $resptr = $sth->fetchrow_hashref() )
{
print "< tr>";
print "< td>" . $resptr->{"latitude"};
print "< td>" . $resptr->{"longitude"};
print "< td>" . $resptr->{"easting"};
print "< td>" . $resptr->{"northing"};
print "n";
}
print "< /table>n";
}
print "< /body>< /html>n";
$dbh->disconnect;

Monografias.com

Python
Python fue creado por Guido van Rossum (http://www.python.org/~guido/)
Da este nombre al lenguaje inspirado por el popular grupo cómico británico Monty Python
Guido creó Python durante unas vacaciones de navidad en las que (al parecer) se estaba aburriendo

Monografias.com

Características de Python
Muy legible y elegante
Imposible escribir código ofuscado
Simple y poderoso
Minimalista: todo aquello innecesario no hay que escribirlo (;, {, }, 'n')
Muy denso: poco código hace mucho
Soporta objetos y estructuras de datos de alto nivel: strings, listas, diccionarios, etc.
Múltiples niveles de organizar código: funciones, clases, módulos, y paquetes
Python standard library (http://www.python.org/doc/current/lib/lib.html) contiene un sinfín de clases de utilidad
Si hay áreas que son lentas se pueden reemplazar por plugins en C o C++, siguiendo la API para extender o empotrar Python en una aplicación, o a través de herramientas como SWIG, sip o Pyrex.

Monografias.com

Características de Python
De scripting (igual que Perl y PHP)
No tienes que declarar constantes y variables antes de utilizarlas
No requiere paso de compilación/linkage
La primera vez que se ejecuta un script de Python se compila y genera bytecode que es luego interpretado
Alta velocidad de desarrollo y buen rendimiento
Código interoperable (como en Java "write once run everywhere")
Se puede utilizar en múltiples plataforma (más aún que Java)
Puedes incluso ejecutar Python dentro de una JVM (Jython)
Open source
Razón por la cual la Python Library sigue creciendo y creciendo
De propósito general
Puedes hacer en Python todo lo que puedes hacer con C# o Java, o más

Monografias.com

Programación de BD en Python
Lo que es JDBC en Java es DB API en Python
Información detallada en: http://www.python.org/topics/database/
Para conectarnos a una base de datos usamos el método connect del módulo de base de datos utilizado que devuelve un objeto de tipo conection
El objeto connection tiene el método cursor() que sirve para recuperar un cursor de la BD
Otros métodos definidos en connection son close(), commit(), rollback(), cursor()
El objeto cursor define entre otros los siguientes métodos:
execute() nos permite enviar una sentencia SQL a la BD
fetchone() recuperar una fila
fetchall() recuperar todas las filas
Hay varios módulos que implementan el estándar DB-API:
DCOracle (http://www.zope.org/Products/DCOracle/) creado por Zope
MySQLdb (http://sourceforge.net/projects/mysql-python)
MySQL-python.exe-0.9.2.win32-py2.3.exe para Windows
MySQL-python-0.9.2-1.i386.rpm para Linux
apt-get install python2.3-mysqldb
Etc.

Monografias.com

Programación Web Python
Pasos para desarrollar aplicaciones web en Python:
Instalar Apache 2.0, disponible en: http://httpd.apache.org/download.cgi
Instalar mod_python 3.1.2b: http://httpd.apache.org/modules/python-download.cgi (si tienes problemas instalando en Python ir a: http://www.modpython.org/pipermail/mod_python/2004-April/015474.html)
Modificar Apache2confhttpd.conf, encontrar otras líneas LoadModule y añadir los siguiente:
LoadModule python_module modules/mod_python.so
Comprobar instalación en:
http://www.modpython.org/live/current/doc-html/inst-testing.html

Configurar Apache añadiendo a httpd.conf las siguientes líneas, para dar soporte a CGIs en Python y PSPs (Python Server Pages):
< Directory "< dir-donde-guardar-python-scripts>">
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
< /Directory>

< Directory "< dir-donde-guardar-paginas-psp>">
AddHandler mod_python .psp
PythonHandler mod_python.psp
PythonDebug On
< /Directory>
Usar el módulo cgi de la Python Library para programar y seguir documentación de mod_python (http://www.modpython.org/live/current/doc-html/)

Monografias.com

Ejemplo CGI I
# cgi-bin/python/holamundo.py
# metodos de ayuda del CGI
def _formatAsHTML(req, content):
req.content_type = "text/html"
return "< html>< head>< title>Hola Mundo Python CGI< /title>< /head>< body>< h1>Ejemplo Python de CGI< /h1>< p>" + content + "< /p>< /body>< /html>"

def _usage():
return "Uso: Debes especificar un parametro de nombre ‘quien’, para saber a quien saludar, e.j: http://localhost:8080/cgi-bin/python/holamundo.py/diHola?quien=Diego"

Monografias.com

Ejemplo CGI II
# único método público que se puede invocar al que hay que pasar obligatoriamente un parametro
def diHola(req, quien=""):
if not quien:
return _formatAsHTML(req, _usage())
return _formatAsHTML(req, "¡Hola " + quien + "!")

# si no se especifica un metodo en la url se invoca index por defecto,
# es decir http://localhost:8080/cgi-bin/python/holamundo.py
def index(req, **params):
paramsPassedStr = ""
if params:
for param in params:
paramsPassedStr += (param + "n")
return _formatAsHTML(req, "Unico metodo publico en CGI es diHola< br>Parametros recibidos: " + paramsPassedStr + "< br>" + _usage())

Monografias.com

Python Server Pages
Mecanismo para incluir sentencias Python en documentos HTML o XML
Similar a PHP, JSP o ASP
¿Es buena práctica mezclar marcado y código?
Patrón de diseño MVC
Sintaxis muy similar a JSP, 4 tipos de entidades:
Código en Python delimitado por códigos de escape < % y %>.
Expresiones delimitadas por < %= y %>.
Directivas, < %@ incluye file=’nombre-fichero’>
Comentarios delimitados por los símbolos < %– y –%>
IMPORTANTE: el intérprete de PSP recuerda la última tabulación de Python.

Monografias.com

Python Server Pages
Hay un conjunto de variables accesibles por PSP en tiempo de ejecución:
req, referencia a un objeto de tipo Request
psp, objeto de tipo PSPInstance que permite invocar métodos como redirect(location) o set_error_page(filename)
form, objeto de tipo FieldStorage
session, objeto de tipo Session

Monografias.com

Ejemplo PSP
< !– /cgi-bin/psp/login.psp –>
< %
import tresenrayaweb
import RegistroJugadoresDB
if not session.has_key('registro'):
session['registro'] = RegistroJugadoresDB.RegistroJugadoresDB()
mensajeError = ""
if form.has_key('nombreUsuario') and form.has_key('clave'):
try:
session['registro'].login(form['nombreUsuario'], form['clave'])
psp.redirect('/cgi-bin/psp/tresenraya.psp?nombreUsuario=' + form['nombreUsuario'])
except:
mensajeError = 'Los detalles de login introducidos son incorrectos'
saludo = 'Introduce tus detalles de logeo para jugar al Tres en Raya'
# end
%>
< html>
< h1>< %= saludo %>< /h1>
< form method="post" action="/cgi-bin/psp/login.psp">
< table>
< tr>< td>Nombre usuario:< /td>< td>< input type="text" name="nombreUsuario">< /td>< /tr>
< tr>< td>Contraseña:< /td>< td>< input type="password" name="clave">< /td>< /tr>
< tr>< td>< input type="submit" value="Login">< /td>< td>< input type="reset" name="Limpiar">< /td>< /tr>
< /table>
< /form>
< %
if len(mensajeError):
%>
< p>< %=mensajeError%>< /p>
< %
# end if
%>
< /html>

Monografias.com

Ejemplo Python
!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import MySQLdb, string, _mysql, _mysql_exceptions, tresenraya

class RegistroJugadoresDB(tresenraya.RegistroJugadores):
def __init__(self):
tresenraya.RegistroJugadores.__init__(self)
db=MySQLdb.connect(host="localhost",user="tresenraya", passwd="tresenraya", db="tresenraya")
self.cursor = db.cursor()
# Asegurarse que si no existe un usuario solop se añada
usuarioSolop = self._executeSQLCommand("select * from usuario where nombreUsuario='solop'")
if not len(usuarioSolop):
self._executeSQLCommand("insert into usuario values('solop', 'solop')")
self._executeSQLCommand("insert into estadistica values('solop', 0, 0, 0)")
print 'Usuario solop y sus estadisticas creadas'
else:
usuarios = self._executeSQLCommand("select * from usuario")
for usuario in usuarios:
self._RegistroJugadores__jugadores[usuario[0]] = usuario[1]
# recuperamos las estadísticas de partidas de un jugador
estadisticasUsuario = self._executeSQLCommand("select ganadas, empatadas, perdidas from estadistica where nombreUsuario='" + usuario[0] + "'")
self._RegistroJugadores__estadisticas[usuario[0]] = [int(estadisticasUsuario[0][0]), int(estadisticasUsuario[0][1]), int(estadisticasUsuario[0][2])]

Monografias.com

Ejemplo Python
def _executeSQLCommand(self, command):
# si la consulta devuelve resultados lo hará como una lista de tuplas, donde cada tupla
# representa una fila de la tabla correspondiente, y cada elemento de la tupla una columna
resultado = []
command = string.strip(command)
if len(command):
try:
resultCode = self.cursor.execute(command) # Ejecuta el comando
if string.lower(command).startswith('select'): # si es una select …
filas = self.cursor.fetchall() # recuperar todos los resultados
for fila in filas:
contenidoFila = []
for columna in fila:
if columna == None:
contenidoFila.append(None)
else:
contenidoFila.append(columna)
resultado.append(tuple(contenidoFila))
except _mysql_exceptions.ProgrammingError, e:
print e
sys.exit()

return resultado

# sigue más código

Monografias.com

Aplicación LAMP con Python

Monografias.com

PHP
PHP (PHP: Hypertext Preprocessor) es un lenguaje de propósito general open source especialmente orientado al desarrollo web.
Creado por Rasmus Lerdorf en 1995
Escrito en C, tiene bajos requerimientos de memoria, es muy rápido
Actualmente mod_php es el módulo Apache más popular para desarrollo web
También compatible con otros servidores web como IIS
Su motor, denominado Zend, en versión 5 es rápido, estable, seguro, simple y multi-plataforma.
Sintácticamente PHP es muy similar a C, pero es de scripting
No hay necesidad de declarar variables y sus tipos
Soporta la mayoría de bases de datos: MySQL, Oracle
Es fácilmente extensible
PEAR (PHP Extension and Add-on Repository) en http://pear.php.net/ es similar a CPAN de Perl

Monografias.com

PHP
PHP es más sencillo que Perl para gente nueva en la escritura de scripts
Recibió el premio al lenguaje de programación del 2004 por Tiobe (The Coding Standards Company) http://www.tiobe.com/tpci.htm
Prueba de su tremenda popularidad
Enlaces:
PHP.net, el dominio principal de PHP www.php.net
PHP Parsing Engine Home site www.zend.com
http://www.onlamp.com/pub/a/php/2004/02/19/php_foundations.html
Para su instalación seguir instrucciones en: http://www.php.net/manual/en/

Monografias.com

Popularidad de PHP
http://www.php.net/usage.php

Monografias.com

Sintaxis de PHP
El modo más portable de empotrar código php en medio de una página de marcado es a través de los delimitadores < ?php y ?>.
< p>Esto va a ser ignorado.< /p>
< ?php echo ‘Mientras que ésto es procesado'; ?>
< p>Esto también será ignorado por el motor PHP.< /p>
Hay cuatro modos diferentes de indicar un scriplet en PHP
Toda instrucción en PHP está separada por ;, salvo opcionalmente la que precee a ?>.
Los comentarios se indican con // y /* y */ como en C y C++
Las variables se representan por el símbolo $ seguido del nombre de la variable
Las constantes se definen y usan como sigue:
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
Dispone de las estructuras de control habituales: if, for, while

Monografias.com

Sintaxis de PHP
Las funciones se declaran precedidas por la palabra clave function
Las clases se definen mediante la palabra clave class:
< ?phpclass SimpleClass{   // member declaration   public $var = 'a default value';   // method declaration   public function displayVar() {       echo $this->var;   }}?>
Soporta también excepciones

Monografias.com

Tipos de Datos en PHP
< ?php$bool = TRUE;  // a boolean$str  = "foo";  // a string$int  = 12;    // an integerecho gettype($bool); // prints out "boolean"echo gettype($str);  // prints out "string"// If this is an integer, increment it by fourif (is_int($int)) {   $int += 4;}// If $bool is a string, print it out// (does not print out anything)if (is_string($bool)) {   echo "String: $bool";}

$fruits = array('strawberry' => 'red', 'banana' => 'yellow');
echo "A banana is {$fruits['banana']}.";
?>

Monografias.com

Variables Predefinicas
Como en mod_python, mod_php provee una serie de variables predefinidas:
$_SERVER ? contiene estado relativo a variables asignadas por el servidor web o el entorno de ejecución
$_GET ? las variables pasadas en el query string (?name1=value1&name2=value2) al hacer un GET
$_POST ? variables pasadas al script durante un HTTP_POST
$_COOKIE ? variables correspondientes a HTTP cookies
$_FILES ? contiene los ficheros provistos durante un file upload
$_ENV ? variables provistas al script por el entorno
$_REQUEST ? variables provistas bien mediante un GET, un POST o una cabecera COOKIE en HTTP
$_SESSION ? variable que guarda el estado del script

Monografias.com

PHP y MySQL
Para la gestión de MySQL desde PHP se puede utilizar PHPMyAdmin
http://www.phpmyadmin.net
Ilustrar: http://localhost:8080/phpMyAdmin-2.6.1-pl1/index.php
Funciones definidas en el módulo php-mysql:
mysql_connect ? abre una conexión a un servidor MySQL
mysql_select_db ? selecciona una BD MySQL
mysql_query ? envía una consulta MySQL
mysql_fetch_array ? recupera los resultados de una consulta
mysql_free_result ? libera la memoria de un ResultSet
mysql_close ? cierra la conexión MySQL
Interfaz genérico de acceso a bases de datos PEAR DB: http://pear.php.net/package/DB

Monografias.com

WAMP
Lo mismo que LAMP excepto que utiliza Windows.
Muchos desarrolladores utilizan WAMP para la creación de aplicaciones web y luego realizan la explotación sobre Linux.
http://www.wampserver.com

Monografias.com

Tu Primera Aplicación LAMP
Vamos a realizar una simple aplicación en LAMP que mantiene una lista de contactos
Seguiremos los siguientes pasos:
Configuración de LAMP/WAMP para PHP
Creación de la BD contacts
Codificación de las páginas php para efectuar altas/bajas/modificaciones de la base de datos

Monografias.com

Configurando LAMP
Las siguientes dos urls contienen instrucciones detalladas sobre cómo instalar LAMP:
Building a LAMP Server
http://www.lamphowto.com/lamp.htm
Build Web Interface to Database – LAMP Linux Apache MySQL PHP
http://www.hut.fi/~tkarvine/lamp-linux-apache-mysql-php.html

Monografias.com

Configurando WAMP
Tras instalar Apache 2, modificar fichero httpd.conf introduciendo las siguiente líneas:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "C:/php "
Añadir a la variable de entorno PATH, el directorio donde se ha instalado PHP5
En php.ini descomentar la línea correspondiente a la extensión PHP para MySQL
extension=php_mysql.dll
Copiar libmysql.dll a c:windowssystem32

Monografias.com

Creando la BD Contacts
— create-contacts-db.sql
CREATE DATABASE contacts;
GRANT ALTER, SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON contacts.*
TO lamp@localhost
IDENTIFIED BY 'lamp';
use contacts;
CREATE TABLE contacts (
id int(6) NOT NULL auto_increment,
first varchar(15) NOT NULL,
last varchar(15) NOT NULL,
phone varchar(20) NOT NULL,
mobile varchar(20) NOT NULL,
fax varchar(20) NOT NULL,
email varchar(30) NOT NULL,
web varchar(30) NOT NULL,
PRIMARY KEY (id),
UNIQUE id (id),
KEY id_2 (id)
)

Ejecutar: mysql –uroot –p < create-contacts-db.sql

Monografias.com

dbinfo.inc.php
< ?php
$username="lamp";
$password="lamp";
$database="contacts";
?>

Monografias.com

Listado de Contactos (index.php)
< html>
< head>< title>Contacts Database< /title>< /head>
< body>
< ?php
include("dbinfo.inc.php");
mysql_connect("localhost",$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM contacts";
$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();

echo "< h1>Contacts< /h1>";

?>
< p>< a href="add.html">Create new contact< /a>< /p>
< table border="0" cellspacing="2" cellpadding="2">
< tr>
< th>< font face="Arial, Helvetica, sans-serif">Name< /font>< /th>
< th>< font face="Arial, Helvetica, sans-serif">Phone< /font>< /th>
< th>< font face="Arial, Helvetica, sans-serif">Mobile< /font>< /th>
< th>< font face="Arial, Helvetica, sans-serif">Fax< /font>< /th>
< th>< font face="Arial, Helvetica, sans-serif">E-mail< /font>< /th>
< th>< font face="Arial, Helvetica, sans-serif">Website< /font>< /th>
< th width=2>< font face="Arial, Helvetica, sans-serif">Actions< /font>< /th>
< /tr>

Monografias.com

Listado de Contactos (index.php)
< ?php
$i=0;
while ($i < $num) {
$id=mysql_result($result,$i,"id");
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
?>
< tr>
< td>< font face="Arial, Helvetica, sans-serif">< ?php echo "$first $last"; ?>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< ?php echo "$phone"; ?>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< ?php echo "$mobile"; ?>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< ?php echo "$fax"; ?>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< a href="mailto:< ?php echo "$email"; ?>">E-mail< /a>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< a href="< ?php echo "$web"; ?>">Website< /a>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< a href="update.php?id=< ?php echo "$id"; ?>">Update< /a>< /font>< /td>
< td>< font face="Arial, Helvetica, sans-serif">< a href="delete.php?id=< ?php echo "$id"; ?>">Delete< /a>< /font>< /td>
< /tr>
< ?php
++$i;
}
echo "< /table>";

?>
< /body>
< /html>

Monografias.com

insert.php
< ?php
include("dbinfo.inc.php");
mysql_connect("localhost",$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$first=$_POST['first'];
$last=$_POST['last'];
$phone=$_POST['phone'];
$mobile=$_POST['mobile'];
$fax=$_POST['fax'];
$email=$_POST['email'];
$web=$_POST['web'];

$query = "INSERT INTO contacts VALUES ('','$first','$last','$phone','$mobile','$fax','$email','$web')";
mysql_query($query);

mysql_close();
include("index.php");
?>

Monografias.com

Aplicación LAMPhp

Monografias.com

Aplicación LAMPhp

Monografias.com

LAMP y CMS
LAMP está siendo muy utilizado en la creación de plataformas para el desarrollo de portales web:
PHPNuke (http://phpnuke.org/)
Post-Nuke (http://www.postnuke.com)
Un CMS (Content Management System) se define como la combinación de una base de datos de gran tamaño y un sistema de ficheros empleados para guardar y recuperar de manera eficiente grandes cantidades de información
Básicamente un CMS ayuda a una empresa a gestionar sus datos
Zope es probablemente el CMS LAMP más completo (basado en Python)
http://www.zope.org

Monografias.com

Alternativas Open Source a LAMP
La plataforma J2EE (Java 2 Enterprise Edition) está diseñada para desarrollar aplicaciones web de altas prestaciones (EJB, Servlet, JSP)
Existen varios servidores de aplicaciones open source:
Jboss (http://www.jboss.org)
Tomcat (http://jakarta.apache.org/tomcat/)
Muchos opinan que al contrario que J2EE, LAMP no es ideal para portales de gran tamaño
La plataforma Mono.NET, implementación libre de .NET
Permite el uso de ASP.NET en Linux
Disponible en https://www.mono-project.com

Monografias.com

Casos de Éxito de LAMP
Algunas empresas que usan LAMP exitosamente son:
Hewlett-Packard
Boeing
Lufthansa
Dresdner Bank
Disney Online
Yahoo!
Lycos
Sprint
T-Mobile
Orange
Nortel Networks
Lucent
WallStreetOnline
Siemens.

Monografias.com

Conclusión
LAMP es una alternativa open source de calidad a otras plataformas de desarrollo web
ASP.NET
J2EE
Su popularidad y fácil aprendizaje son argumentos para considerarla en tus futuros desarrollos web
El pago de licencias no siempre está ligado a la calidad de las herramientas
LAMP es gratuito y muy indicado para portales de tamaño medio
Material y ejemplos de esta presentación disponibles en:
http://paginaspersonales.deusto.es/dipina/cursos/lamp.zip

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter